This document is an attempt to put what I have learnt of the
various data structures used in the Command and Conquer file
'game.dat' so that other people can create editors for this
game as well.

The areas I focussed on when creating my editor (ccedit) were:
buildings, infantry and vehicles. I found out after I started
that there were 2 (at least) classes of vehicles: aircraft
and land vehicles. This means that there are at least 4 different
data structures used that I have some knowledge about (there
are undoubtably lots more used, but I don't know what they are).

I will use the terminology 'entry' to describe the fields in
the data structures, simply because I don't have a complete account
of the entire data structures used, so I will be using one entry
as a landmark to point to others.

PART 1: DETERMINING THE ENTRY SIZE
----------------------------------
One thing that makes editing these data structures difficult is that
they can be of different sizes within the file. There is a way to
work out the size of an entry however. It will only ever be either
a 1 byte value or a 4 byte value. The way to find out which it will
be is to look at the byte directly before it. If the value is 0x6a,
then the next entry will be a single byte. If the value is 0x68, then
the next entry will be 4 bytes long.

The values stored here are signed values.

The differences in entry size usually occur in entries dealing with
hit points, and occasionally cost. Most of the time when dealing with
vehicles, the hit points are stored as a 4 byte value, but for some of
them, they are stored as a single byte value (which is why I classified
things as being light and heavy in my editor).

I may be possible to change the size of the game.dat file to convert a
single byte value to a 4 byte value, but as this file is an executable
file, I don't know what effect this would have (its probably not worth
the bother).

PART 2: REACHING THE END OF A STRUCTURE
---------------------------------------
You can tell when you reach the end of one complete structure when you
come across the value 0x81 then 0xc4. I think the value after these
two reflects what type of data structure it is (whether aircraft, vehicle,
etc).

PART 3: AIRCRAFT STRUCTURE
--------------------------
There are 5 apparent aircraft. They are (in order of their appearance in
the game.dat file): A-10, Chinook, Apache, Orca, and (I think) the
transport plane.

To give you a hint, the speed for the A-10 is at offset 0x667c8 (in the
1.18p English version of Command and Conquer).

The aircraft data stucture is:
entry        use
----------------
1            ?
2            ?
3            speed
4            armour
5            secondary weapon
6            primary weapon
7            owner
8            ?
9            ?
10           ?
11           cost
12           visual radius
13           hit points
14           number of shots
15           ?
16           ?
17           ?
18           ?
19           invulnerability
20           ?
21           ?
22           ?
23           ?
24           ?
25           ?
26           ?
27           gives it a set of rotor blades
28           no wait between attacks; but can't fly (for orcas). Obviously             used for the A-10's
29           transport ability (stuffs up graphics for apaches)
30           ?
31           ?

There are a couple of other after this. One of the unknown entries between
14 and 31 has to do with giving that unit an additional rotor blade (which
turns around in the opposite direction). The rotor blade is actually just
a little animation that the aircraft can access (they are like the turrets
on the tanks).

PART 4: BUILDING STRUCTURE
--------------------------
There are a number of structures in the file, but I never bothered with the
ones you cannot build. The others would undoubtably have the same format
(roughly) as these.

To give you a hint, the power required for the Temple of Nod is at offset
0x6defa (in the 1.18p English version of Command and Conquer).

The building data structure is:
entry        use
----------------
1            ?
2            ?
3            ?
4            ?
5            power required
6            power produced
7            ?
8            ?
9            ?
10           secondary weapon
11           primary weapon
12           owner
13           ?
14           ?
15           ?
16           cost
17           visual radius (I think)
18           hit points
19           ?
20           what this structure can build (8 = construction yard; 6 =
             helicopters; 4 = vehicles [may need to set an extra entry to
             get this to work properly]; 2 = infantry)
21           ?
22           ?
23           ?
24           ?
25           fires weapons twice
26           ? (may have to do with the SAM site's pop-up graphics)
27           graphics for that building are not shown (not cloaked, just
             not drawn)
28           invulnerability
29           ?
30           ?
31           ?
32           ?
33           ?
34           ?
35           ?
36           ?
37           ? (couldn't deploy it anywhere)
38           ?
39           ?
40           ?

There are some others after this.

PART 5: VEHICLE STRUCTURE
-------------------------
The order of the vehicles in this section of the file is: viceroid, flame
tank, stealth tank, light tank, medium tank, mammoth tank, hovercraft,
mobile HQ, SSM, artillery, harvester, MCV, humm-vee, buggy, bike, rocket
launcher, APC, boat, triceratops, t-rex, 'raptor, and stegasaurus.

To give you a hint, the armour for the viceroid is at offset 0xde22e (in
the 1.18p English version of Command and Conquer).

The vehicles structure is:
entry        use
----------------
1            ?
2            ?
3            ?
4            speed
5            ?
6            ?
7            secondary weapon
8            primary weapon
9            owner
10           ?
11           ?
12           ?
13           cost
14           visual radius
15           hit points
16           ?
17           cycles through all that units graphics (used for the viceroid)
18           stealth
19           ? got rid of the turret on the medium tank
20           ?
21           ?
22           ?
23           ?
24           (what I was talking about in the aircraft section - this gives
             a tank 2 turrets rotating in opposite directions)
25           ?
26           ?
27           ?
28           fires its weapons twice
29           ?
30           invulnerability
31           ?
32           ?
33           ?
34           ?
35           can harvest tiberium (can't go into the refinery is this
             is set by itself)
36           ?
37           ?
38           transport (but can't carry infantry if set by itself)
39           ?
40           doesn't display the graphics for that unit (set to ON by
             default for the dinosaurs)
41           ?
42           ?
43           ?

There are some other entries after these.

PART 6: INFANTRY STRUCTURE
--------------------------
This section is definitely the hardest. I have almost no knowledge about
what this data structure is. It was just luck that  found this in the
first place.

To give you a hint, the weapon for the mnigunner is at offset 0x96fac (in
the 1.18p English version of Command and Conquer).

entry        use
----------------
1            ?
2            secondary weapon
3            primary weapon
4            owner
5            ?
6            ?
7            ?
8            cost
9            visual radius
10           HP

There are many more entries after this one, but I have no idea what
they do.

I tried looking for things like invulnerability, but couldn't find it.

Andrew Griffin

========================================================================
======================= end of document ================================
========================================================================

This next section is an extremly brief note about how to work out the
addresses on the internal files in the .mix files used in Command and
Conquer.

The first part of the file contains the information you need to be able
to work out how many internal files there are, where they are, and how
large they are.

The format of this header information is:
short int    number of internal files (I'll refer to this as N)
long int     size of file - modifier

[modifier = N*12 + 6]
Then for each of the N internal files, you have the following entry
information:
short int    ?? unknown ??
short int    ?? unknown ??
long int     offset in file - modifier
long int     length of internal file

[this information is thanks to Jens Mueller]

With regard to the general.mix file (that is the file which contains all
the mission information, you can tell which internal files are the map
entries by their size. Each map has a size of 0x2000.

Andrew Griffin
